package com.frog.service.friend.model;


import com.frog.common.util.MapBuilderUtil;
import com.frog.service.friend.common.CommonStringUtil;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;

import java.util.Map;


@Getter
@Setter
public class RelationModel {
    public static final Map<String, String> FROM_TO_ADD_EXISTING_MODIFY = MapBuilderUtil.put("0", "3").put("1", "2").build();
    public static final Map<String, String> TO_FROM_ADD_EXISTING_MODIFY = MapBuilderUtil.put("0", "1").put("3", "2").build();
    /**
     * 取消关注,元数据和要修改成数据对应关系
     */
    private static final Map<String, String> FROM_TO_DIE_EXISTING_MODIFY = MapBuilderUtil.put("3", "0").put("2", "1").build();
    private static final Map<String, String> TO_FROM_DIE_EXISTING_MODIFY = MapBuilderUtil.put("1", "0").put("2", "3").build();


    private Long id;
    // 数据库中发起人
    private Integer fromUserId;
    // 数据库中关注人
    private Integer toUserId;
    // 添加/取消操作后,status和statusLater是否发生了改变,是否操作成功
    private boolean successStatus;
    // 是否发起人
    private boolean hasInitiator;
    // 是添加 or 取消
    private boolean add;
    // 前关系状态
    private String status;
    // 后关系状态
    private String statusLater;


    /**
     * 构造方法
     *
     * @param id         好友关系编号
     * @param userId     userId参数,用户验证在数据库中的字段
     * @param fromUserId 数据库中fromUserId
     * @param toUserId   数据库中toUserId
     * @param status     数据库中status状态
     * @param add        方法是否来自与添加关系
     */
    public RelationModel(Long id, Integer userId, Integer fromUserId, Integer toUserId, String status, boolean add) {
        this.id = id;
        this.hasInitiator = userId.equals(fromUserId);
        this.fromUserId = hasInitiator ? fromUserId : toUserId;
        this.toUserId = hasInitiator ? toUserId : fromUserId;
        this.add = add;
        this.status = status;
        this.statusLater = statusLater(status, add);
        this.successStatus = StringUtils.isNotBlank(this.status) && !this.status.equals(this.statusLater);
    }


    protected String statusLater(String status, boolean hasAddFriend) {
        String statusLater = "";
        if (hasAddFriend) {
            statusLater = this.hasInitiator
                    ? StringUtils.isBlank(status) ? CommonStringUtil.FriendBothStatus.sendConcerned : FROM_TO_ADD_EXISTING_MODIFY.get(status)
                    : StringUtils.isBlank(status) ? CommonStringUtil.FriendBothStatus.unilateralAttention : TO_FROM_ADD_EXISTING_MODIFY.get(status);
        } else {
            statusLater = this.hasInitiator
                    ? StringUtils.isBlank(status) ? CommonStringUtil.FriendBothStatus.notConcerned : FROM_TO_DIE_EXISTING_MODIFY.get(status)
                    : StringUtils.isBlank(status) ? CommonStringUtil.FriendBothStatus.notConcerned : TO_FROM_DIE_EXISTING_MODIFY.get(status);
        }
        return StringUtils.isBlank(statusLater) ? status : statusLater;
    }

    // 操作后,是双向关系
    public boolean isMutualFriendAfter() {
        return successStatus && CommonStringUtil.FriendBothStatus.mutualConcern.equals(statusLater);
    }

    // 操作前,是双向关系
    public boolean isMutualFriendBeter() {
        return successStatus && CommonStringUtil.FriendBothStatus.mutualConcern.equals(status);
    }


}